package com.sline.stream;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo3_Copy {
    public static void main(String[] args) throws IOException {

        // demo1();

        // demo2();

        // demo3();

    }

    private static void demo3() throws IOException {
        FileInputStream fis = new FileInputStream("abc.mp4");
        FileOutputStream fos = new FileOutputStream("copy.mp4");

        byte[] arr = new byte[1024 * 8];
        int len;
        while ((len = fis.read(arr)) != -1) {
            fos.write(arr, 0, len);
        }

        fis.close();
        fos.close();
    }

    private static void demo2() throws IOException {
        // 不推荐使用, 可能会导致内存溢出
        FileInputStream fis = new FileInputStream("abc.mp4");
        FileOutputStream fos = new FileOutputStream("copy.mp4");

        // 获取文件的总字节数
        int len = fis.available();
        System.out.println(len);

        // 创建与文件一样大小的字节数组
        byte[] arr = new byte[len];

        // 将文件上的字节数读取到内存中
        fis.read(arr);
        // 将字节数组中的数据写到文件上
        fos.write(arr);

        fis.close();
        fos.close();
    }

    private static void demo1() throws IOException {
        // 不推荐使用, 效率太低
        FileInputStream fis = new FileInputStream("abc.png");
        FileOutputStream fos = new FileOutputStream("copy.png");

        int b;
        while ((b = fis.read()) != -1) {
            fos.write(b);
        }

        fis.close();
        fos.close();
    }
}
